package com.ruoyi.ldzlsc.service;

import com.ruoyi.ldzlsc.domain.vo.ScProductionPlanVo;
import com.ruoyi.ldzlsc.domain.vo.ScProductionPlanDetailVo;
import com.ruoyi.ldzlsc.domain.vo.ScMaterialVo;
import java.util.List;

/**
 * 生产计划Service接口
 *
 * @author ruoyi
 * @date 2025-06-25
 */
public interface IScProductionPlanService {
    /**
     * 查询生产计划列表
     *
     * @param scProductionPlanVo 生产计划
     * @return 生产计划集合
     */
    public List<ScProductionPlanVo> selectScProductionPlanList(ScProductionPlanVo scProductionPlanVo);

    /**
     * 根据计划编码分解生产计划
     *
     * @param planCode 生产计划编码
     */
    public void decomposePlan(String planCode);
    
    /**
     * 新增生产计划
     *
     * @param scProductionPlanVo 生产计划信息
     * @return 结果
     */
    public int insertProductionPlan(ScProductionPlanVo scProductionPlanVo);

    /**
     * 修改生产计划
     * @param scProductionPlanVo 生产计划信息
     * @return 结果
     */
    public int updateProductionPlan(ScProductionPlanVo scProductionPlanVo);

    /**
     * 批量删除生产计划
     * @param productionPlanIds 需要删除的生产计划ID
     * @return 结果
     */
    public int deleteProductionPlanByIds(Long[] productionPlanIds);
    
    /**
     * 根据计划编码查询生产计划详情
     *
     * @param planCode 计划编码
     * @return 生产计划信息
     */
    public ScProductionPlanVo selectScProductionPlanByPlanCode(String planCode);

    List<ScProductionPlanDetailVo> selectPlanDetailListByPlanCode(String planCode);

    /**
     * 根据计划编号查询物料明细列表
     * @param planCode 计划编号
     * @return 物料明细列表
     */
    List<ScMaterialVo> selectMaterialListByPlanCode(String planCode);

    /**
     * 根据生产订单ID创建生产计划
     * @param productionOrderId 生产订单ID
     * @return 生产计划信息
     */
    ScProductionPlanVo createPlanFromProductionOrder(Long productionOrderId);
}